package cn.good.yan.service.t2;

import java.util.concurrent.*;

/**
 * 2. CompletableFuture 定义操作 - 异步任务
 *    异步执行逻辑， 有返回值  和 没有返回值
 *
 * @author shengren.yan
 * @create 2024-03-23
 */
public class CompletableFuture1 {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 线程池
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        // 没有返回参数 - 执行单线程，可传参数，也可以不传（线程池）
        CompletableFuture<Void> completableFutureA = CompletableFuture.runAsync(() -> {
            System.out.println(Thread.currentThread().getName() + "子线程 - 任务正在执行");
            //暂停几秒钟线程
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, threadPool);

        // 有返回参数 - 执行单线程，可传参数,也可以不传（线程池）
        CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {
            System.out.println(Thread.currentThread().getName() + "子线程 - 任务正在执行");
            //暂停几秒钟线程
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "返回值：hello supplyAsync";
        }, threadPool);
        // 打印返回值
        System.out.println(completableFuture.get());

        // 关闭线程池
        threadPool.shutdown();
    }
}
